#include <iostream>
#include <vector>
#include <unordered_map>
#include <cassert>

using namespace std;
// 1. 两数之和
// 给定一个整数数组 nums 和一个整数目标值 target，
// 请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
// 输入：nums = [2,7,11,15], target = 9
// 输出：[0,1]
// 解释：因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。
// https://leetcode.cn/problems/two-sum/description/

// 暴力解法
// Time Complexity: O(n)
// Space Complexity: O(n)
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int n = nums.size();
        for(int i = 0; i < n; i++) {
            for(int j = i+1; j < n; j++) {
                if(nums[j] == target - nums[i])
                    return {i,j};
            }
        }
        return {};
    }
};
void print_vec(const vector<int>& vec){
    for(int e: vec)
        cout << e << " ";
    cout << endl;
}

int main() {
    const int nums[] = {0,4,3,0};
    vector<int> nums_vec( nums, nums + sizeof(nums)/sizeof(int) );
    int target = 0;
    print_vec(Solution().twoSum(nums_vec, target));

    const int nums2[] = {2,7,11,15};
    vector<int> nums_vec2( nums2, nums2 + sizeof(nums2)/sizeof(int) );
    target = 9;
    print_vec(Solution().twoSum(nums_vec2, target));
    return 0;
}
